<?php
abstract class Kernel 
{  
    
    public static function getIP()
    {
        return $_SERVER['REMOTE_ADDR'];
    }
    
    public static function getContexto()
    {
        return sfContext::getInstance(); 
    }

    
    public static function getRequestParameters()
    {
        if(self::getContexto()->getRequest()->getParameterHolder() !== null)
            return self::getContexto()->getRequest()->getParameterHolder()->getAll();
        else
            return array();
    }
    
    public static function getAccion()
    {
        return self::getContexto()->getModuleName()."/". self::getContexto()->getActionName();   
    }
        
    public static function setLogin($login)
    {
        sfContext::getInstance()->getUser()->setAttribute("login",$login);
    }
    
    public static function setNombre($nombre)
    {
        sfContext::getInstance()->getUser()->setAttribute("nombre",$nombre);
    }


    
    public static function setGrupoTrabajo($grupo_trabajo)
    {
        sfContext::getInstance()->getUser()->setAttribute("grupo_trabajo",$grupo_trabajo);
    }
    public static function setUsuarioId($usuario_id)
    {
        sfContext::getInstance()->getUser()->setAttribute("usuario_id",$usuario_id);
    }
    public static function getLogin()
    {
        if(self::getUser()->getAttributeHolder() != null)
            return   Kernel::getUser()->getAttribute("login", "none");
        else
            return 'none';
    }
    
    public static function getUsuarioId()
    {
        if(self::getUser()->getAttributeHolder() != null)
            return   Kernel::getUser()->getAttribute("usuario_id", "none");
        else
            return 'none';
    }
    
    public static function getNombre()
    {
        if(self::getUser()->getAttributeHolder() != null)
            return  self::getUser()->getAttribute("nombre", "--");
        else
            return "--";
    }

    public static function getGrupoTrabajo()
    {
        if(self::getUser()->getAttributeHolder() !== null )
            return self::getUser()->getAttribute("grupo_trabajo", 'sifiadmin');
        else
            return 'sifiadmin';
    }

    public static function getUser()
    {
        if(sfContext::getInstance()->getUser() !== null)
            return  sfContext::getInstance()->getUser();
        else
            return null;  
    }
    
    
    /**
     *  Esta variable s usa para mostrar contenido generalmente de procesos que solo muestran informaci�n en texto
     * @var        string
    */
    public static $contenido = "";
    
    /**
    * Reemplaza el contenido de la variable $contenido
    * @param      string [$c] informaci�n para mostrar. 
    * 
    * @return     null
    */   
    public static function setContenido($c)
    {
        Kernel::$contenido = $c;
    }
    
    
    /**
    * Concatena informaci�n al contenido de la variable $contenido
    * @param      string [$c] informaci�n para mostrar. 
    * 
    * @return     null
    */   
    public static function addContenido($c)
    { 
        Kernel::$contenido .= $c;
    }
    
    /**
    *  Muestra informaci�n que ha sido puesta en la variable Kernel::$contenido mediante los metodos  setContenido y  addContenido.
    *  La informaci�n se despliega con la ayuda del componente  mostrarContenido del modulo default.
    * 
    * @return  null  
    */
    public static function getContenido()
    {
       sfLoader::loadHelpers( 'Partial');         
       $cont = get_partial("default/mostrarContenido");
       $cont = str_replace('reemplazar_contenido', Kernel::$contenido, $cont);
       return $cont;
    }
    
   public static function setIPsAutorizados($user, $ips)
   {
        if(self::getUser()->getAttributeHolder() !== null )
            self::getUser()->setAttribute($user."_IPS", $ips);

   }
    
   public static function getIPsAutorizados($user)
   {
        if(self::getUser()->getAttributeHolder() !== null )
            return self::getUser()->getAttribute($user."_IPS", null);
        else
            return "123215";
   }    
    /**
    *  Devuelve una objecto conexión de la base de datos
    * 
    * @return  object Connetion  
    */
    public static function getConnection()
    {
        return Propel::getConnection();
    }
    
    
    /**
    *  Crea una variable de session.
    * 
    * @param      string [$var] nombre de la variable.
    * @param      mixed [$val] valor de la variable.
    * @param      string [$ns] namespace.
    * 
    * @return  null  
    */
    public static function setVariable($var, $val, $ns=null)
    {
        sfContext::getInstance()->getUser()->setAttribute("$var", $val, $ns);
    }
    
    /**
    *  Obtiene el valor de una variable de session.
    * 
    * @param      string [$var] nombre de la variable.
    * @param      string [$ns] namespace.
    * 
    * @return  var  
    */
    public static function getVariable($var, $def=null, $ns=null)
    {             
        return sfContext::getInstance()->getUser()->getAttribute("$var", $def, $ns); 
    }
  
    
    
    
    /*
    * Permite colocar una division que se muestra en caso de que hayan errores en los fomularios.
    * Esta division solo es informativa y presenta una leyenda predeterminada. Los valores dinamicos de los errores
    * se presenten por medio de las validaciones js y php.
    * John R.Q.
    */
    public static function divError()
    {
    	$ruta_img = sfConfig::get('sf_root_dir');
 		$ruta_img = str_replace("\\", "/", $ruta_img);
 		$e = explode('/',  $ruta_img);
 		$ruta_img = $e[count($e)-1];
 
    	$imagen_html =  '<img  src="/'.$ruta_img.'/web/images/iconos/gif/ico_error.gif" width="20", height="20">';
    	return "<div id='div_error' style='display:none'>
			$imagen_html Los campos sombreados presentan un tipo de error.<br> Para ver el detalle pase el mouse sobre la imagen; 
		</div>";
    }
    
     public static function getContadorDetalle()
    {
       
        return sfContext::getInstance()->getUser()->getAttribute('contadordetalle', -1); 
    }
    public static function setContadorDetalle($contador)
    {
       
        return sfContext::getInstance()->getUser()->setAttribute('contadordetalle', $contador); 
    }
    
    /**
    * Original sfLoader class
    * Gets directories where template files are stored for a generator class and a specific theme.
    *
    * @param string The generator class name
    * @param string The theme name
    *
    * @return array An array of directories
    */
    static public function getGeneratorTemplateDirs($class, $theme)
    {
        $dirs = array();

        if ($pluginDirs = glob(sfConfig::get('sf_plugins_dir').'/*/data/generator/'.$class.'/'.$theme.'/template'))
        {
          $dirs = array_merge($dirs, $pluginDirs);                                                                // plugin
        }

        $dirs[] = sfConfig::get('sf_data_dir').'/generator/'.$class.'/'.$theme.'/template';                       // project
        $dirs[] = sfConfig::get('sf_symfony_data_dir').'/generator/'.$class.'/default/template';                  // default theme

        return $dirs;
    }
      
      
    /**
    * 
    * Original sfLoader class  
    * Gets the template to use for a generator class.
    *
    * @param string The generator class name
    * @param string The theme name
    * @param string The template path
    *
    * @return string A template path
    *
    * @throws sfException
    */
    static public function getGeneratorTemplate($class, $theme, $path)
    {
        $dirs = self::getGeneratorTemplateDirs($class, $theme);
        foreach ($dirs as $dir)
        {
          if (is_readable($dir.'/'.$path))
          {
            return $dir.'/'.$path;
          }
        }

        throw new sfException(sprintf('Unable to load "%s" generator template in: %s', $path, implode(', ', $dirs)));
    }
    
    static public function getListadoSiNo()
    {
           return array(''=>'-- Seleccione un valor --', '1'=> 'Si', '0'=>'No');
    }
    
}
?>
